#ifndef _GUI_BASE_H_
#define _GUI_BASE_H_

#include "common/preclude.h"
#include "common/type.h"

#include "imgui.h"
#include "imgui_impl_sdl.h"
#include "imgui_impl_opengl3.h"

/*
 * 基于ImGUI实现的UGUI框架
 * GUI需要运行在一创建的编辑器窗口上
 * 若是没有编辑器窗口需要确保该窗口已初始化ImGUI环境
 */

//绑定类成员函数
//将一个类成员函数绑定到一个指针上
template <typename UserClass, typename RetType, typename... ParamTypes>
DelegateFuncType<RetType> BindMemFunction(UserClass *Class, typename TMemFuncPtrType<UserClass, RetType(ParamTypes...)>::Type Ptr, ParamTypes... Vars)
{
    DelegateFuncType<RetType> fn = std::bind(Ptr, Class, Vars...);
    return fn;
}
//绑定全局函数
//奖一个全局函数绑定到一个指针上
template <typename RetType, typename... ParamTypes>
DelegateFuncType<RetType> BindCommonFunction(typename TFuncPtrType<RetType(ParamTypes...)>::Type Ptr, ParamTypes... Vars)
{
    DelegateFuncType<RetType> fn = std::bind(Ptr, Vars...);
    return fn;
}

#endif